package com.kinyx.framework.db.daos;

import java.util.List;

import com.kinyx.framework.db.entities.I_ID;
import com.kinyx.framework.db.sentence.str.SQL;
import com.kinyx.framework.vo.InPageData;
import com.kinyx.framework.vo.OutPageData;

/**
 * 数据访问定义接口（HQL查询语句）
 */
public interface _Dao_HQL_find extends __Dao {

	/**
	 * 查询列表数据
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param hql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @param maxCount 最大数据量，小于等于0表示不限制数量。
	 * @return 列表数据
	 * @deprecated {@link _Dao_Sentence_get#getList(DaoParam, com.kinyx.framework.db.sentence.defines.SelectSentence, Class)}
	 */
	@Deprecated
	<E> List<E> findList(DaoParam dp, String hql, List<Object> params, Class<E> clazz, int maxCount);

	/**
	 * 查询列表数据
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param hql 查询语句
	 * @param clazz 返回值类型
	 * @param maxCount 最大数据量，小于等于0表示不限制数量。
	 * @return 列表数据
	 * @deprecated {@link _Dao_Sentence_get#getList(DaoParam, com.kinyx.framework.db.sentence.defines.SelectSentence, Class)}
	 */
	@Deprecated
	default <E> List<E> findList(final DaoParam dp, final SQL hql, final Class<E> clazz, final int maxCount) { return this.findList(dp, hql.getSentence(), hql.getParams(), clazz, maxCount); }

	/**
	 * 查询单个数据
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param hql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @return 单个数据
	 * @deprecated {@link _Dao_Sentence_get#getOne(DaoParam, com.kinyx.framework.db.sentence.defines.SelectSentence, Class)}
	 */
	@Deprecated
	<E> E findOne(DaoParam dp, String hql, List<Object> params, Class<E> clazz);

	/**
	 * 查询单个数据
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param hql 查询语句
	 * @param clazz 返回值类型
	 * @return 单个数据
	 * @deprecated {@link _Dao_Sentence_get#getOne(DaoParam, com.kinyx.framework.db.sentence.defines.SelectSentence, Class)}
	 */
	@Deprecated
	default <E> E findOne(final DaoParam dp, final SQL hql, final Class<E> clazz) { return this.findOne(dp, hql.getSentence(), hql.getParams(), clazz); }

	/**
	 * 查询单个数据（使用主键）
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param clazz 返回值类型
	 * @param id 主键
	 * @return 单个数据
	 */
	<E extends I_ID> E findOneById(DaoParam dp, Class<E> clazz, String id);

	/**
	 * 查询分页数据
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param hql 查询语句
	 * @param params 参数
	 * @param clazz 返回值类型
	 * @param pageData 分页信息
	 * @return 分页数据
	 * @deprecated {@link _Dao_Sentence_get#getPage(DaoParam, com.kinyx.framework.db.sentence.defines.SelectSentence, Class)}
	 */
	@Deprecated
	<E> OutPageData<E> findPage(DaoParam dp, String hql, List<Object> params, Class<E> clazz, InPageData pageData);

	/**
	 * 查询分页数据
	 * @param <E> 泛型
	 * @param dp 数据访问参数
	 * @param hql 查询语句
	 * @param clazz 返回值类型
	 * @param pageData 分页信息
	 * @return 分页数据
	 * @deprecated {@link _Dao_Sentence_get#getPage(DaoParam, com.kinyx.framework.db.sentence.defines.SelectSentence, Class)}
	 */
	@Deprecated
	default <E> OutPageData<E> findPage(final DaoParam dp, final SQL hql, final Class<E> clazz, final InPageData pageData) { return this.findPage(dp, hql.getSentence(), hql.getParams(), clazz, pageData); }

}
